package com.lvmama.comm.bee.service.sync;

import java.util.List;
import java.util.Map;

import com.lvmama.comm.sync.po.SyncMessage;
import com.lvmama.comm.sync.pojo.SyncTemplate;
import com.lvmama.comm.sync.pojo.SyncTemplateSql;
import com.lvmama.comm.sync.pojo.SyncTrigger;

/**
 * 异构数据同步基础服务.
 *
 * @author zuoxiaoshuai
 */
public interface SyncBaseNewService {


	/**
	 * 更新同步数据状态.
	 *
	 * @param ids ID列表
	 * @param status 状态
	 * @return the int
	 */
	int updateTriggersStatus(List<String> ids, String status);

	/**
	 * 保存模板.
	 *
	 * @param template the template
	 * @return the sync template
	 */
	SyncTemplate saveSyncTemplate(SyncTemplate template);

	/**
	 * 更新模板.
	 *
	 * @param template the template
	 * @return the int
	 */
	int updateSyncTemplate(SyncTemplate template);

	/**
	 * 通过ID查找模板.
	 *
	 * @param id the id
	 * @return the sync template
	 */
	SyncTemplate findSyncTemplateById(Long id);

	/**
	 * 通过条件查找模板.
	 *
	 * @param params the params
	 * @return the list
	 */
	List<SyncTemplate> findSyncTemplatePageListByCondition(
			Map<String, Object> params);

	/**
	 * 通过条件求模板总数.
	 *
	 * @param params the params
	 * @return the long
	 */
	Long countSyncTemplateByCondition(Map<String, Object> params);

	/**
	 * 通过唯一键查找模板.
	 *
	 * @param template the template
	 * @return the sync template
	 */
	SyncTemplate findSyncTemplateByUniqueKey(SyncTemplate template);

	/**
	 * 保存模板脚本.
	 *
	 * @param templateSql the template sql
	 */
	Long saveSyncTemplateSql(SyncTemplateSql templateSql);

	/**
	 * 更新模板脚本.
	 *
	 * @param templateSql the template sql
	 * @return the int
	 */
	int updateSyncTemplateSql(SyncTemplateSql templateSql);

	/**
	 * 通过主键查找模板脚本.
	 *
	 * @param id the id
	 * @return the sync template sql
	 */
	SyncTemplateSql findSyncTemplateSqlById(Long id);

	/**
	 * 通过模板ID查找模板脚本.
	 *
	 * @param templateId the template id
	 * @return the list
	 */
	List<SyncTemplateSql> findSyncTemplateSqlListByTemplateId(Long templateId);

	/**
	 * 重新排序模板脚本.
	 *
	 * @param id the id
	 * @param direction the direction
	 */
	void resortSyncTemplateSql(Long id, String direction);

	/**
	 * 通过目标目标SQL查找源SQL列表
	 * @param sql
	 * @return
	 */
	List<SyncTemplateSql> findSyncTemplateSqlListByTargetTemplateSql(
			SyncTemplateSql sql);

	/**
	 * 通过主键删除模板SQL
	 * @param templateSqlId
	 */
	void deleteSyncTemplateSqlById(Long templateSqlId);

	/**
	 * 通过模板SQL查找目标SQL列表
	 * @param temp
	 * @return
	 */
	List<SyncTemplateSql> findTargetSyncTemplateSqlListByTemplateSql(
			SyncTemplateSql temp);

	/**
	 * 判断源SQL是否使用中
	 * @param templateSqlId
	 * @return
	 */
	boolean checkSourceSyncTemplateSql(Long templateSqlId);

	List<SyncTemplate> findSyncTemplateListBySelects(List<String> templateIds);

	void deleteSyncTemplateSqlByTemplateId(Long templateId);

	void saveSyncTrigger(SyncTrigger trigger);

	void saveSyncTrigger(String id, String userName, String tableName,
			String dataSourceId, String triggerType);

	void saveSyncTrigger(String id, String userName, String tableName,
			String dataSourceId, String triggerType, String f1);

	void saveSyncTrigger(String id, String userName, String tableName,
			String dataSourceId, String triggerType, String f1, String f2);

	void saveSyncTrigger(String id, String userName, String tableName,
			String dataSourceId, String triggerType, String f1, String f2,
			String f3);

	/**
	 * 获取同步数据.
	 *
	 * @param condition 
	 * @return the list
	 */
	List<SyncTrigger> findTriggerPageList(Map<String, Object> condition);
	
	List<SyncTrigger> findTriggerPageListWithTime(Map<String, Object> condition);

	Integer moveSyncTriggerData(Map paramMap);

	void deleteSyncMessageList(List<Long> idList);
	
	List<SyncMessage> findSyncMessagePageList(Map<String, Object> params);
	
	Integer getInitStatusTriggerCount(Map<String, Object> params);
	
	/**
	 * 更新sync trigger优先级
	 * */
	int updatePLevelByParams(Map<String, Object> params);
	
	Integer getCountAfterMoveSyncTriggerData(Map paramMap) ;

	/**
	 * 删除历史数据
	 * */
	public Integer deleteSyncTriggerByParams(Map paramMap);
	
	public int updateCompleteCountById(String triggerId, Long completeCount,Long successNum,Long failNum);
	
	/**
	 * 用户单个模板查看syncTrigger队列
	 * @param condition
	 * @return
	 */
	List<SyncTrigger> queryTriggerListPage(Map<String, Object> condition);
	
	public Long countSyncTrigger(Map<String, Object> params);
	
	/**
	 * 删除模板  ，模板sql
	 * @param templateId
	 */
	public void deleteTemplateById(Long templateId);
}
